Sifat Homoikonik
Bahasa homoikonik: Bahasa di mana representasi internal dinyatakan dalam bahasa itu sendiri. Dalam Elixir, kode sumber bukan sekadar teks; ia adalah struktur data bersarang yang dikenal sebagai Pohon Sintaks Abstrak (AST).
1. Aturan Logika Representasi
Elixir menyederhanakan AST dengan merepresentasikan literal dasar sebagai dirinya sendiri. Atom, angka, daftar (termasuk daftar kunci), biner, dan tuple dengan dua elemen direpresentasikan secara internal tanpa pembungkus kompleks.
[do: 1]
iex> quote do: "binaries"
"binaries"
2. Struktur Tuple AST
Sebagian besar transformasi kode menghasilkan tuple tiga elemen: {nama_fungsi, metadata, argumen}. Sebagai contoh, panggilan fungsi seperti 1 + 2 menjadi {:+, [line: 1], [1, 2]}. Ini memungkinkan bahasa untuk memperlakukan Kode sebagai Data.
3. Makro: Menunda Eksekusi
Makro adalah "cara menunda eksekusi klausa dengan menyisipkan kode kembali ke representasi internal program kita." Sementara fungsi standar mengevaluasi argumen sebelum memanggil, makro menerima AST mentah, memungkinkan penyisipan logika sebelum kompilasi.
$$\text{Kode Sumber} \xrightarrow{\text{Quote}} \text{Tupel AST} \xrightarrow{\text{Makro}} \text{AST yang Diubah}$$